home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib09.dsk / PROGRAM PACKER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  3KB  |  67 lines

  1. 1  REM  **********************
  2. 2  REM  *   PROGRAM PACKER   *
  3. 3  REM  * BY DOUGLAS MCNEILL *
  4. 4  REM  * COPYRIGHT (C) 1982 *
  5. 5  REM  * BY MICRO-SPARC INC *
  6. 6  REM  * LINCOLN, MA. 01773 *
  7. 7  REM  **********************
  8. 10 ML$ = "X":ZZ = 0: GOTO 30
  9. 20 ML$ = "X":ZZ = 1: REM  - REENTRY POINT
  10. 30  REM  PROGRAM START
  11. 40 RD = 768:AF = 807
  12. 50  REM  - RD=READ/AF=APPEND FIX
  13. 60  FOR J = RD TO AF +B: READ I: POKE J,I: NEXT 
  14. 70  DATA  162,0,32,117,253,160,2
  15. 80  DATA  138,145,105,200,169,0
  16. 90  DATA  145,105,200,169,2,145
  17. 100  DATA  105,160,0,185,0,2,201,141,240
  18. 110  DATA  9,41,127,153,0,2,200,76,22,3,96,169,0,,32,237,253,32,142,253,96
  19. 120  REM  - PACK APPLESOFT PROGRAM FOR TEXT TRANSMISSION IN MINIMUM TIME
  20. 130  REM  - BY DELETION OF SPACES
  21. 140  DIM A$(500)
  22. 150 D$ =  CHR$(4)
  23. 180 QUOTE = 34:SPACE = 32:COLN = 58:TTL = 0:PACK = 0: IF ZZ = 0  THEN 220
  24. 190 FI$ = "": FOR J = 816 TO 845:FI$ = FI$ + CHR$( PEEK(J)): NEXT 
  25. 200  FOR J = 30 TO 2  STEP  -1:J1 =  ASC( MID$ (FI$,J,1)): IF J1 = 32  THEN  NEXT 
  26. 210 FI$ =  LEFT$(FI$,J): PRINT D$"OPEN M/PACKFILE TEMP": PRINT D$"READ M/PACKFILE TEMP": GOTO 290
  27. 220  HOME : VTAB 8: PRINT "THIS PROGRAM WILL REDUCE THE SIZE OF AN APPLESOFT PROGRAM TO BE TRANSMITTED AS ATEXT FILE BY REMOVING NON-ESSENTIAL     SPACES IN THE TEXT"
  28. 230  PRINT : PRINT "HAVE YOU MADE THE PROGRAM INTO A TEXT FILE (Y/N)?";: GET Q$: PRINT : IF Q$ < >"Y"  AND Q$ < >"N"  THEN 220
  29. 240  PRINT :ZZ$ = "TEXT": IF Q$ = "N"  THEN ZZ$ = "APPLESOFT"
  30. 250  INVERSE : PRINT "NAME OF "ZZ$" FILE ";: NORMAL : CALL RD:FI$ =  MID$ (ML$,1)
  31. 260  IF  LEN(FI$) = 0  THEN 250
  32. 270  IF ZZ$ = "APPLESOFT"  THEN 620
  33. 280  PRINT D$"OPEN"FI$: PRINT D$"READ"FI$
  34. 290  ONERR  GOTO 320
  35. 300 I = 0
  36. 310  CALL RD:I = I +1:A$(I) =  MID$ (ML$,1): PRINT ML$: GOTO 310
  37. 320 Y =  PEEK(222): POKE 216,0: IF Y < >5  THEN  RESUME 
  38. 330  PRINT D$"CLOSE": IF ZZ = 1  THEN  PRINT D$"DELETE M/PACKFILE TEMP"
  39. 340  REM  - STRIP BLANKS
  40. 350  FOR J = 1 TO I
  41. 360  REM  - TEST FOR REMARKS
  42. 370 T$ = A$(J):TTL = TTL + LEN(T$) +1: IF T$ = ""  THEN 520
  43. 380  FOR K = 1 TO 6:A =  ASC( MID$ (T$,K,1)): IF A < >SPACE  THEN  NEXT : PRINT "LINE ERROR ": INVERSE : PRINT T$: NORMAL : END 
  44. 390  IF  MID$ (T$,K +2,3) = "REM"  OR  MID$ (T$,K +2,4) = "DATA"  THEN PACK = PACK + LEN(T$) +1: GOTO 510: REM  - LEAVE REM'S AND DATA STATEMENTS INTACT
  45. 400 QF = 0:T1$ =  LEFT$(T$,K -1):CF = 0
  46. 410  FOR L = K +1 TO  LEN(T$)
  47. 420 Q$ =  MID$ (T$,L,1):Q =  ASC(Q$)
  48. 430  IF Q = COLN  AND QF = 0  THEN CF = 1: GOTO 480
  49. 440  IF Q = SPACE  AND QF = 0  THEN 490
  50. 450  IF CF = 1  AND  MID$ (T$,L,3) = "REM"  THEN T1$ = T1$ + MID$ (T$,L):PACK = PACK + LEN(T$) -L +1: GOTO 500
  51. 460  IF Q = QUOTE  THEN QF =  ABS(QF -1)
  52. 470 CF = 0
  53. 480 T1$ = T$ +Q$:PACK = PACK +1
  54. 490  NEXT L:PACK = PACK +1
  55. 500 T$ = T1$
  56. 510 A$(J) = T$: PRINT T$
  57. 520 X =  FRE(0): NEXT J
  58. 530  PRINT D$"OPEN"FI$"/P": PRINT D$"WRITE"FI$"/P"
  59. 540  FOR J = 1 TO I: PRINT A$(J): NEXT : PRINT D$"CLOSE"
  60. 550  PRINT : PRINT : PRINT "TOTAL BYTES PROCESSED ";TTL: PRINT "PACKED BYTES ";PACK: PRINT : PRINT "SAVING "; INT((TTL -PACK) *10000/TTL +.5)/100);"%"
  61. 560  DEF  FN A(X) =  INT((X) *8/3/60 +.5)/100
  62. 570  INVERSE : PRINT "TIME ESTIMATES:": NORMAL : PRINT : PRINT "SOURCE PROGRAM "; FN A(TTL);" MINS"
  63. 580  PRINT "OBJECT PROGRAM "; FN A(PACK);" MINS"
  64. 590  INVERSE 
  65. 600  PRINT "NET SAVING     "; FN A(TTL -PACK);" MINS"
  66. 610  NORMAL : END 
  67. 620  PRINT D$"EXEC M/PACKEXEC1"